package array.binarySearch;

import java.util.Random;

/**
 * 猜数字游戏的规则如下：
 * <p>
 * 每轮游戏，我都会从 1 到 n 随机选择一个数字。 请你猜选出的是哪个数字。
 * 如果你猜错了，我会告诉你，你猜测的数字比我选出的数字是大了还是小了。
 * 你可以通过调用一个预先定义好的接口 int guess(int num) 来获取猜测结果，返回值一共有 3 种可能的情况（-1，1 或 0）：
 * <p>
 * -1：我选出的数字比你猜的数字小 pick < num
 * <p>
 * 1：我选出的数字比你猜的数字大 pick > num
 * <p>
 * 0：我选出的数字和你猜的数字一样。恭喜！你猜对了！pick == num
 * <p>
 * 返回我选出的数字。
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：<a href="https://leetcode.cn/problems/guess-number-higher-or-lower">374. 猜数字大小 - 力扣（LeetCode）</a>
 */
public class N374_GuessNumberHigherOrLower {
    private static int num;
    private static Random random = new Random();

    public int guessNumber(int n) {
        int left = 1, right = n;
        int pick = left + (right - left) / 2;
        int res = 0;
        while ((guess(pick) = res) != 0) {
            if (res == -1) right = pick - 1;
            pick = left + (right - left) / 2;
        }
        return pick;
    }

}
